/*
 * # 应用所有视图:
 *  Authority - 组织与用户
 * 
 * # 描述:
 *  为应用提供组织、工作岗位、用户的管理功能，以及针对组织、部门、岗位和用户的权限分派和验证功能，同时提供用户登录、注销、导航等基础功能。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

 use "pittypat_app";
 go

/*
 * # 对象视图 - Sql Server:
 *   User - 用户
 * 
 * # 描述:
 *   表示当前用户的用户信息。
 */

if object_id(N'"waln_authority"."v_authentication_user"', N'V') is null
	exec('create view "waln_authority"."v_authentication_user" as select null as "_null"');
go

alter view "waln_authority"."v_authentication_user"
as
	select
		u."PK",
		u."Id", -- Id
		u."LoginName", -- 登录名称
		u."No", -- 编号
		u."Name", -- 用户名称
		u."FaceUrl", -- 头像路径
		u."Mobile", -- 手机号码
		u."Email", -- 电子邮件地址
		u."CreateTime", -- 创建时间
		u."LockTime", -- 锁定时间
		u."LoginTime", -- 登录时间
		u."LoginHomeUrl", -- 登录后首页
		u."LoginHomeDescription", -- 登录后首页说明
		sysdatetime() as "Now" -- 服务器当前时间
	from
		"waln_authority"."users" as u;
go

/*
 * # 对象视图 - Sql Server:
 *   App - App
 * 
 * # 描述:
 *   已经安装的 App。
 */

if object_id(N'"waln_authority"."v_authentication_app"', N'V') is null
	exec('create view "waln_authority"."v_authentication_app" as select null as "_null"');
go

alter view "waln_authority"."v_authentication_app"
as
	select
		a."Id", -- Id
		a."DeveloperCode", -- 开发者代码
		a."DeveloperName", -- 开发者名称
		a."Identifier", -- App 标识符
		a."Name", -- App 名称
		a."Version", -- App 版本
		a."ModuleCount", -- 模块数目
		a."Description", -- 描述
		a."Position", -- 位置
		a."InstallTime" -- 安装时间
	from
		"waln_authority"."apps" as a;
go

/*
 * # 对象视图 - Sql Server:
 *   Module - 模块
 * 
 * # 描述:
 *   表示 App 中的一个模块。
 */

if object_id('"waln_authority"."v_authentication_module"', 'V') is null
	exec('create view "waln_authority"."v_authentication_module" as select null as "_null"');
go

alter view "waln_authority"."v_authentication_module"
as
	select
		m."Id", -- Id
		m."AppId", -- 隶属 App 的 Id
		m."Position", -- 位置
		m."Identifier", -- 标识符
		m."Name", -- 模块名称
		m."Presentation", -- 呈现方式
		m."AllowAnonymous", -- 允许匿名访问
		m."Description" -- 描述
	from
		"waln_authority"."modules" as m;
go

/*
 * # 对象视图 - Sql Server:
 *   Org - 根组织
 * 
 * # 描述:
 *   表示一个最顶层的根组织。
 */

if object_id(N'"waln_authority"."v_organization_org"', N'V') is null
	exec('create view "waln_authority"."v_organization_org" as select null as "_null"');
go

alter view "waln_authority"."v_organization_org"
as
	select
		d."Id", -- Id
		d."Name", -- 名称
		d."Description", -- 描述
		d."CreateDate" -- 设立日期
	from
		"waln_authority"."depts" as d
	where 
		d."Level" = 0;
go

/*
 * # 对象视图 - Sql Server:
 *   Dept - 部门
 * 
 * # 描述:
 *   表示组织中的一个部门，不用于表示根组织。
 */

if object_id(N'"waln_authority"."v_organization_dept"', N'V') is null
	exec('create view "waln_authority"."v_organization_dept" as select null as "_null"');
go

alter view "waln_authority"."v_organization_dept"
as
	select
		d."Id", -- Id
		d."Level", -- 层级
		d."ParentId", -- 上级部门的 Id
		d."OrgId", -- 根组织的 Id
		d."Name", -- 名称
		d."Description", -- 描述
		d."CreateDate" -- 设立日期
	from
		"waln_authority"."depts" as d;
go

/*
 * # 对象视图 - Sql Server:
 *   Post - 工作岗位
 * 
 * # 描述:
 *   表示在一个组织或部门中设立的工作岗位。
 */

if object_id(N'"waln_authority"."v_organization_post"', N'V') is null
	exec('create view "waln_authority"."v_organization_post" as select null as "_null"');
go

alter view "waln_authority"."v_organization_post"
as
	select
		p."Id", -- Id
		p."DeptId", -- 隶属部门的 Id
		p."Name", -- 岗位名称
		p."Description", -- 描述
		p."CreateDate" -- 设立日期
	from
		"waln_authority"."posts" as p;
go

/*
 * # 对象视图 - Sql Server:
 *   User - 用户账号
 * 
 * # 描述:
 *   部门或岗位中的一个用户账号。
 */

if object_id(N'"waln_authority"."v_organization_user"', N'V') is null
	exec('create view "waln_authority"."v_organization_user" as select null as "_null"');
go

alter view "waln_authority"."v_organization_user"
as
	select
		u."PK", -- 主键
		u."UserId", -- 用户的 Id
		u."PostId", -- 工作岗位的 Id
		u."DeptId", -- 隶属部门的 Id
		u."OrgId", -- 根组织的 Id
		u."CreateTime", -- 分配时间
		u."Description", -- 描述
		u1."LoginName", -- 登录名称
		u1."No", -- 编号
		u1."Name", -- 用户名称
		u1."FaceUrl", -- 头像路径
		u1."Mobile", -- 手机号码
		u1."Email", -- 电子邮件地址
		u1."CreateTime" as "RegTime", -- 用户创建时间
		u1."LockTime", -- 锁定时间
		u1."LoginTime", -- 登录时间
		u1."LoginHomeUrl", -- 登录后首页
		u1."LoginHomeDescription" -- 登录后首页说明
	from
		"waln_authority"."userposts" as u
	join 
		"waln_authority"."users" as u1 on u1."Id" = u."UserId";
go

/*
 * # 对象视图 - Sql Server:
 *   App - App
 * 
 * # 描述:
 *   已经安装的 App。
 */

if object_id(N'"waln_authority"."v_organization_app"', N'V') is null
	exec('create view "waln_authority"."v_organization_app" as select null as "_null"');
go

alter view "waln_authority"."v_organization_app"
as
	select
		a."Id", -- Id
		a."DeveloperCode", -- 开发者代码
		a."DeveloperName", -- 开发者名称
		a."Identifier", -- App 标识符
		a."Name", -- App 名称
		a."Version", -- App 版本
		a."ModuleCount", -- 模块数目
		a."Description", -- 描述
		a."Position", -- 位置
		a."InstallTime" -- 安装时间
	from
		"waln_authority"."apps" as a;
go

/*
 * # 对象视图 - Sql Server:
 *   Module - 模块
 * 
 * # 描述:
 *   表示 App 中的一个模块。
 */

if object_id(N'"waln_authority"."v_organization_module"', N'V') is null
	exec('create view "waln_authority"."v_organization_module" as select null as "_null"');
go

alter view "waln_authority"."v_organization_module"
as
	select
		m."Id", -- Id
		m."AppId", -- 隶属 App 的 Id
		m."Position", -- 位置
		m."Identifier", -- 标识符
		m."Name", -- 模块名称
		m."Presentation", -- 呈现方式
		m."AllowAnonymous", -- 允许匿名访问
		m."Description" -- 描述
	from
		"waln_authority"."modules" as m;
go

/*
 * # 对象视图 - Sql Server:
 *   User - 用户
 * 
 * # 描述:
 *   表示一个可以登录和使用系统的用户。
 */

if object_id(N'"waln_authority"."v_users_user"', N'V') is null
	exec('create view "waln_authority"."v_users_user" as select null as "_null"');
go

alter view "waln_authority"."v_users_user"
as
	select
		u."PK",
		u."Id", -- Id
		u."LoginName", -- 登录名称
		u."No", -- 编号
		u."Name", -- 用户名称
		u."FaceUrl", -- 头像路径
		u."Mobile", -- 手机号码
		u."Email", -- 电子邮件地址
		u."CreateTime", -- 创建时间
		u."LockTime", -- 锁定时间
		u."LoginTime", -- 登录时间
		u."LoginHomeUrl", -- 登录后首页
		u."LoginHomeDescription" -- 登录后首页说明
	from
		"waln_authority"."users" as u;
go

/*
 * # 对象视图 - Sql Server:
 *   App - App
 * 
 * # 描述:
 *   已经安装的 App。
 */

if object_id(N'"waln_authority"."v_users_app"', N'V') is null
	exec('create view "waln_authority"."v_users_app" as select null as "_null"');
go

alter view "waln_authority"."v_users_app"
as
	select
		a."Id", -- Id
		a."DeveloperCode", -- 开发者代码
		a."DeveloperName", -- 开发者名称
		a."Identifier", -- App 标识符
		a."Name", -- App 名称
		a."Version", -- App 版本
		a."ModuleCount", -- 模块数目
		a."Description", -- 描述
		a."Position", -- 位置
		a."InstallTime" -- 安装时间
	from
		"waln_authority"."apps" as a;
go

/*
 * # 对象视图 - Sql Server:
 *   Module - 模块
 * 
 * # 描述:
 *   表示 App 中的一个模块。
 */

if object_id(N'"waln_authority"."v_users_module"', N'V') is null
	exec('create view "waln_authority"."v_users_module" as select null as "_null"');
go

alter view "waln_authority"."v_users_module"
as
	select
		m."Id", -- Id
		m."AppId", -- 隶属 App 的 Id
		m."Position", -- 位置
		m."Identifier", -- 标识符
		m."Name", -- 模块名称
		m."Presentation", -- 呈现方式
		m."AllowAnonymous", -- 允许匿名访问
		m."Description" -- 描述
	from
		"waln_authority"."modules" as m;
go

/*
 * # 对象视图 - Sql Server:
 *   App - App
 * 
 * # 描述:
 *   已经安装的 App。
 */

if object_id(N'"waln_authority"."v_apps_app"', N'V') is null
	exec('create view "waln_authority"."v_apps_app" as select null as "_null"');
go

alter view "waln_authority"."v_apps_app"
as
	select
		a."Id", -- Id
		a."DeveloperCode", -- 开发者代码
		a."DeveloperName", -- 开发者名称
		a."Identifier", -- App 标识符
		a."Name", -- App 名称
		a."Version", -- App 版本
		a."ModuleCount", -- 模块数目
		a."Description", -- 描述
		a."Position", -- 位置
		a."InstallTime" -- 安装时间
	from
		"waln_authority"."apps" as a;
go

/*
 * # 对象视图 - Sql Server:
 *   Module - 模块
 * 
 * # 描述:
 *   表示 App 中的一个模块。
 */

if object_id(N'"waln_authority"."v_apps_module"', N'V') is null
	exec('create view "waln_authority"."v_apps_module" as select null as "_null"');
go

alter view "waln_authority"."v_apps_module"
as
	select
		m."Id", -- Id
		m."AppId", -- 隶属 App 的 Id
		m."Position", -- 位置
		m."Identifier", -- 标识符
		m."Name", -- 模块名称
		m."Presentation", -- 呈现方式
		m."AllowAnonymous", -- 允许匿名访问
		m."Description" -- 描述
	from
		"waln_authority"."modules" as m;
go
